package cn.well.cloud.base.meta;

import cn.stylefeng.roses.core.util.ToolUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.ReflectionException;

import java.time.LocalDateTime;
import java.util.Date;


/**
 * 自定义sql字段填充器,本类默认在default-config.properties中配置
 * <p>
 * 若实际项目中，字段名称不一样，可以新建一个此类，在yml配置中覆盖mybatis-plus.global-config.metaObject-handler配置即可
 * <p>
 * 注意默认获取的userId为空
 *
 * @author wison
 * @Date 2019/8/7 下午12:42
 */
public class CustomMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {

//        Object delFlag = null;
//
//        try {
//            delFlag = this.getFieldValByName(this.getDeleteFlagFieldName(), metaObject);
//            if (delFlag == null) {
//                this.setFieldValByName(this.getDeleteFlagFieldName(), this.getDefaultDelFlagValue(), metaObject);
//            }
//        } catch (ReflectionException var8) {
//            ;
//        }

    	//逻辑删除字段
        try {
            Object delFlag = getFieldValByName(getDeleteFlagFieldName(), metaObject);
            if (delFlag == null) {
                setFieldValByName(getDeleteFlagFieldName(), getDefaultDelFlagValue(), metaObject);
            }
        } catch (ReflectionException var8) {
            ;
        }
        //创建时间
        try {
            Object createTime = getFieldValByName(getCreateTimeFieldName(), metaObject);
            if (ToolUtil.isOneEmpty(createTime)) {
                setFieldValByName(getCreateTimeFieldName(), new Date(), metaObject);
            }
        } catch (ReflectionException var7) {
            ;
        }
        //创建人
        try {
            Object createUser = getFieldValByName(getCreateUserFieldName(), metaObject);
            if (ToolUtil.isOneEmpty(createUser)) {
                //获取当前登录用户
                Object accountId = this.getUserUniqueId();
                this.setFieldValByName(this.getCreateUserFieldName(), accountId, metaObject);
            }
        } catch (ReflectionException var6) {
            ;
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
    	//修改时间
        try {
            setFieldValByName(getUpdateTimeFieldName(),new Date(), metaObject);
        } catch (ReflectionException var5) {
            ;
        }
        //修改人
        //获取当前登录用户
        try {
            Object accountId = getUserUniqueId();
            setFieldValByName(getUpdateUserFieldName(), accountId, metaObject);
        } catch (ReflectionException var4) {
            ;
        }

    }

    /**
     * 获取逻辑删除字段的名称（非数据库中字段名称）
     */
    protected String getDeleteFlagFieldName() {
        return "delFlag";
    }

    /**
     * 获取逻辑删除字段的默认值
     */
    protected Object getDefaultDelFlagValue() {
        return "N";
    }

    /**
     * 获取创建时间字段的名称（非数据库中字段名称）
     */
    protected String getCreateTimeFieldName() {
        return "createTime";
    }

    /**
     * 获取创建用户字段的名称（非数据库中字段名称）
     */
    protected String getCreateUserFieldName() {
        return "createUser";
    }

    /**
     * 获取更新时间字段的名称（非数据库中字段名称）
     */
    protected String getUpdateTimeFieldName() {
        return "updateTime";
    }

    /**
     * 获取更新用户字段的名称（非数据库中字段名称）
     */
    protected String getUpdateUserFieldName() {
        return "updateUser";
    }

    /**
     * 获取用户唯一id（注意默认获取的用户唯一id为空，如果想填写则需要继承本类）
     */
    protected Object getUserUniqueId() {
        return "";
    }
}